// var isValidBST = function (root) {
//     function help(node, min, max) {
//         if (node === null) return true;

//         if (node.val <= min || node.val >= max) {
//             return false
//         }
//         return help(node.left, min, node.val) && help(node.right, node.val, max)
//     }

//     return help(root, -Infinity, Infinity)
// };

var isValidBST = function (root) {
    // 验证二叉搜索树
    // 思路；左孩子严格小于根节点，右孩子严格大于根节点，每个节点的值都有一个范围
    function isTwoSearchTree(node, min, max) {
        if (!node) return true;

        if (node.val <= min || node.val >= max) return false;
        return isTwoSearchTree(node.left, min, node.val) && isTwoSearchTree(node.right, node.val, max);
    }
    return isTwoSearchTree(root, -Infinity, Infinity);
}